home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 60 / src / hd.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-05-17  |  1.2 KB  |  72 lines

  1. /* dump the contents of a file in hex words */
  2.  
  3. #include <stdio.h>
  4.  
  5. main(argc, argv) int argc; char *argv[]; {
  6.     int i;
  7.     FILE *f;
  8.     if (argc == 1) {
  9.         hd(stdin);
  10.     }
  11.     else    {
  12.         for (i = 1; i < argc; i++) {
  13.             printf("%s\n", argv[i]);
  14.             if ((f = fopen(argv[i], "r")) != NULL) {
  15.                 hd(f);
  16.                 fclose(f);
  17.             }
  18.         }
  19.     }
  20.     return 0;
  21. }
  22.  
  23. hd(f) FILE *f; {
  24.     int offset, cnt, hi, lo, i, word[8];
  25.     offset = 0;
  26.     cnt = 8;
  27.     while (cnt == 8) {
  28.         puthex(offset, 4);
  29.         putchar(':');
  30.         putchar(' ');
  31.         for (cnt = 0; cnt < 8; ) {
  32.             if ((hi = getc(f)) == EOF) break;
  33.             offset++;
  34.             if ((lo = getc(f)) == EOF) {
  35.                 word[cnt++] = (hi << 8);
  36.                 break;
  37.             }
  38.             else    {
  39.                 word[cnt++] = (hi << 8) + lo;
  40.                 offset++;
  41.             }
  42.         }
  43.         for (i = 0; i < cnt; i++) {
  44.             puthex(word[i], 4);
  45.             putchar(' ');
  46.         }
  47.         for ( ; i < 8; i++) printf("     ");
  48.         printf(" | ");
  49.         for (i = 0; i < cnt; i++) {
  50.             putcx(word[i] >> 8);
  51.             putcx(word[i]);
  52.         }
  53.         putchar('\n');
  54.     }
  55.     if (cnt != 0) {
  56.         puthex(offset, 4);
  57.         putchar('\n');
  58.     }
  59. }
  60.  
  61. puthex(n, size) {
  62.     if (size > 1) puthex(n >> 4, size - 1);
  63.     putchar("0123456789ABCDEF"[n & 15]);
  64. }
  65.  
  66. putcx(c) {
  67.     c = c & 255;
  68.     if (c >= 32 && c <= 127) putchar(c);
  69.     else putchar('.');
  70. }
  71.  
  72.